정적 메서드
정적 메서드
JavaScript는 객체 지향 프로그래밍(OOP)의 여러 기능을 지원하며, 중 하나로 **정적 메서드Static Methods)를 제공합니다. 정적서드는 클래스 자체에 속하며, 클래스의 인스턴스를 생성하지 않고도 호출할 수 있는 메서드입니다. 이 문서에서는 JavaScript에서 정적 메서드의 개념, 사용 방법, 주요 특징 및 실제 활용 사례를 다룹니다.
개요
정적 메서드는 클래스의 프로토타입이 아닌 클래스 생성자 함수에 직접 정의되는 메서드입니다. 즉, 인스턴스를 생성하지 않아도 클래스 이름을 통해 직접 접근할 수 있습니다. 이는 유틸리티 함수, 도우미 함수, 또는 클래스 전반에 걸쳐 공유되는 로직을 구현할 때 유용합니다.
정적 메서드는 static
키워드를 사용하여 정의합니다. ES6에서 도입된 클래스 문법을 통해 정적 메서드를 쉽게 작성할 수 있습니다.
정적 메서드의 정의와 문법
JavaScript에서 정적 메서드는 클래스 내부에서 static
키워드를 앞에 붙여 정의합니다.
class MathUtils {
static add(a, b) {
return a + b;
}
static multiply(a, b) {
return a * b;
}
}
위 예제에서 [add](/doc/%EA%B8%B0%EC%88%A0/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D/%EC%A0%95%EC%A0%81%20%EB%A9%94%EC%84%9C%EB%93%9C/add)
와 [multiply](/doc/%EA%B8%B0%EC%88%A0/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D/%EC%A0%95%EC%A0%81%20%EB%A9%94%EC%84%9C%EB%93%9C/multiply)
는 정적 메서드입니다. 이들을 호출할 때는 다음과 같이 인스턴스를 생성하지 않고 클래스 이름을 직접 사용합니다.
console.log(MathUtils.add(5, 3)); // 8
console.log(MathUtils.multiply(4, 6)); // 24
주의할 점
- 정적 메서드는 인스턴스 메서드와 달리
new
키워드로 생성된 객체를 통해 호출할 수 없습니다. - 정적 메서드 내부에서
this
는 클래스 생성자 함수를 가리키며, 인스턴스의 프로퍼티에 접근할 수 없습니다.
const utils = new MathUtils();
// utils.add(1, 2); // 오류: utils.add is not a function
정적 메서드의 특징
1. 인스턴스 생성 없이 호출 가능
정적 메서드는 객체를 생성하지 않고도 사용할 수 있어, 메모리 낭비를 줄이고 간편한 호출이 가능합니다.
2. 상속 가능
정적 메서드는 자식 클래스에 의해 상속됩니다. 즉, 부모 클래스의 정적 메서드는 자식 클래스에서도 직접 호출할 수 있습니다.
class Animal {
static breathe() {
return "모든 동물은 숨을 쉰다.";
}
}
class Dog extends Animal {}
console.log(Dog.breathe()); // "모든 동물은 숨을 쉰다."
3. this
의 의미
정적 메서드 내부에서 this
는 현재 클래스를 가리킵니다. 이를 통해 같은 클래스 내의 다른 정적 메서드를 호출할 수 있습니다.
class Calculator {
static square(x) {
return x * x;
}
static cube(x) {
return this.square(x) * x; // this는 Calculator 클래스를 가리킴
}
}
console.log(Calculator.cube(3)); // 27
정적 메서드의 활용 사례
1. 유틸리티 클래스
정적 메서드는 반복적으로 사용되는 유틸리티 함수를 정리할 때 적합합니다.
class StringUtils {
static isEmpty(str) {
return str === null || str === undefined || str.trim() === '';
}
static capitalize(str) {
return str.charAt(0).toUpperCase() + str.slice(1);
}
}
console.log(StringUtils.isEmpty("")); // true
console.log(StringUtils.capitalize("hello")); // "Hello"
2. 객체 생성 팩토리 메서드
정적 메서드를 사용해 다양한 방식으로 인스턴스를 생성하는 팩토리 메서드를 구현할 수 있습니다.
class Person {
constructor(name, age) {
this.name = name;
this.age = age;
}
static fromBirthYear(name, birthYear) {
const currentYear = new Date().getFullYear();
return new Person(name, currentYear - birthYear);
}
}
const person = Person.fromBirthYear("홍길동", 1990);
console.log(person.age); // 34 (2024년 기준)
3. 싱글턴 패턴 구현
정적 메서드를 통해 싱글턴 패턴을 구현할 수 있습니다. 이는 클래스의 인스턴스가 단 하나만 존재하도록 보장합니다.
class Database {
static instance = null;
static getInstance() {
if (!this.instance) {
this.instance = new Database();
return this.instance;
}
connect() {
console.log("데이터베이스에 연결되었습니다.");
}
}
const db1 = Database.getInstance();
const db2 = Database.getInstance();
console.log(db1 === db2); // true (같은 인스턴스)
정적 메서드와 인스턴스 메서드의 차이
항목 | 정적 메서드 | 인스턴스 메서드 |
---|---|---|
호출 방식 | ClassName.method() |
instance.method() |
인스턴스 필요 여부 | 불필요 | 필요 |
this 의 의미 |
클래스 생성자 함수 | 인스턴스 객체 |
상속 | 가능 (정적 메서드도 상속됨) | 가능 |
주 용도 | 유틸리티, 팩토리, 공유 로직 | 객체 상태 조작 |
참고 자료 및 관련 문서
정적 메서드는 JavaScript에서 클래스 기반 프로그래밍을 보다 효율적으로 만들어주는 강력한 기능입니다. 올바르게 사용하면 코드의 재사용성과 유지보수성을 크게 향상시킬 수 있습니다. 특히 유틸리티 함수나 객체 생성 로직을 캡슐화할 때 매우 유용합니다.
이 문서는 AI 모델(qwen-3-235b-a22b-instruct-2507)에 의해 생성된 콘텐츠입니다.
주의사항: AI가 생성한 내용은 부정확하거나 편향된 정보를 포함할 수 있습니다. 중요한 결정을 내리기 전에 반드시 신뢰할 수 있는 출처를 통해 정보를 확인하시기 바랍니다.